package com.relytosoft.mizar.analyze.face.api.pojo.dto;

import com.baomidou.mybatisplus.annotation.TableField;
import com.relytosoft.dubhe.common.core.base.BaseEntity;
import com.relytosoft.dubhe.common.core.utils.BeanCopyUtils;
import com.relytosoft.mizar.analyze.base.enums.DeleteStatusEnum;
import com.relytosoft.mizar.analyze.base.enums.TaskTypeEnum;
import com.relytosoft.mizar.analyze.face.api.entity.AyFaceTask;
import com.relytosoft.mizar.analyze.face.api.pojo.vo.AyCameraVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @Author: zyc
 * @version: v1.0
 * @description: com.relytosoft.mizar.analyze.face.api.pojo.dto
 * @Date: 2022/5/13 9:58
 */
@ApiModel("AyFaceTaskDto")
public class AyFaceTaskDto extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @ApiModelProperty(value = "主键", required = true)
    @TableField("ID")
    @NotBlank(message = "主键不能为空")
    private Integer id;

    /**
     * 任务名称
     */
    @ApiModelProperty(value = "任务名称", required = true)
    @TableField("NAME")
    @NotBlank(message = "任务名称不能为空")
    private String name;

    /**
     * 任务类型;1：实时任务，2：离线视频任务，3：离线文件任务
     */
    @ApiModelProperty(value = "任务类型;1：实时任务，2：离线视频任务，3：离线文件任务")
    @TableField("TYPE")
    private Integer type;

    /**
     * 设备
     */
    @ApiModelProperty(value = "设备", required = true)
    @NotBlank(message = "设备不能为空")
    private List<AyCameraVo> ayCameraVos;


    /**
     * 任务开始时间;(实时任务、离线视频任务)
     */
    @ApiModelProperty(value = "任务开始时间;(实时任务、离线视频任务)")
    @TableField("BEGIN_TIME")
    private LocalDateTime beginTime;

    /**
     * 任务结束时间;(实时任务、离线视频任务)
     */
    @ApiModelProperty(value = "任务结束时间;(实时任务、离线视频任务)")
    @TableField("END_TIME")
    private LocalDateTime endTime;

    /**
     * 状态 -1-未启动，0-创建中，1-运行中，2-已结束，3-异常
     */
    @ApiModelProperty(value = "状态;-1-未启动，0-创建中，1-运行中，2-已结束，3-异常", required = true)
    @TableField("STATUS")
    @NotBlank(message = "状态不能为空")
    private Integer status;

    /**
     * 删除标记;0：否，1：是
     */
    @ApiModelProperty(value = "删除标记;0：否，1：是")
    @TableField("IS_DELETED")
    private Integer isDeleted;

    /**
     * 任务状态异常原因
     */
    @ApiModelProperty(value = "任务状态异常原因")
    @TableField("ERROR_REASON")
    private String errorReason;

    /**
     * 是否启动成功过;0：否，1：是
     */
    @ApiModelProperty(value = "是否启动成功过;0：否，1：是")
    @TableField("IS_START_UP")
    private Integer isStartUp;

    /**
     * 防止并发状态重复启动;1 正在启动 0 可以启动
     */
    @ApiModelProperty(value = "防止并发状态重复启动;1 正在启动 0 可以启动")
    @TableField("IS_STARTING")
    private Integer isStarting;

    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    @TableField("REMARK")
    private String remark;

    public static AyFaceTask buildAddTask(AyFaceTaskDto ayFaceTaskDto) {
        AyFaceTask ayFaceTask = new AyFaceTask();
        BeanCopyUtils.copy(ayFaceTaskDto, ayFaceTask);
        ayFaceTask.setType(TaskTypeEnum.REAL_TIME.getValue());
        ayFaceTask.setIsDeleted(DeleteStatusEnum.NOT_DELETED.getValue());
        return ayFaceTask;
    }

    /**
     * 获得主键
     */
    public Integer getId() {
        return this.id;
    }

    /**
     * 设置主键
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * 获得任务名称
     */
    public String getName() {
        return this.name;
    }

    /**
     * 设置任务名称
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获得任务开始时间;(实时任务、离线视频任务)
     */
    public LocalDateTime getBeginTime() {
        return this.beginTime;
    }

    /**
     * 设置任务开始时间;(实时任务、离线视频任务)
     */
    public void setBeginTime(LocalDateTime beginTime) {
        this.beginTime = beginTime;
    }

    /**
     * 获得任务结束时间;(实时任务、离线视频任务)
     */
    public LocalDateTime getEndTime() {
        return this.endTime;
    }

    /**
     * 设置任务结束时间;(实时任务、离线视频任务)
     */
    public void setEndTime(LocalDateTime endTime) {
        this.endTime = endTime;
    }

    /**
     * 获得任务类型;1：实时任务，2：离线视频任务，3：离线文件任务
     */
    public Integer getType() {
        return this.type;
    }

    /**
     * 设置任务类型;1：实时任务，2：离线视频任务，3：离线文件任务
     */
    public void setType(Integer type) {
        this.type = type;
    }

    /**
     * 获得状态 :正在运行 ：已停止 ：已删除
     */
    public Integer getStatus() {
        return this.status;
    }

    /**
     * 设置状态 :正在运行 ：已停止 ：已删除
     */
    public void setStatus(Integer status) {
        this.status = status;
    }

    /**
     * 获得删除标记;0：否，1：是
     */
    public Integer getIsDeleted() {
        return this.isDeleted;
    }

    /**
     * 设置删除标记;0：否，1：是
     */
    public void setIsDeleted(Integer isDeleted) {
        this.isDeleted = isDeleted;
    }

    /**
     * 获得任务状态异常原因
     */
    public String getErrorReason() {
        return this.errorReason;
    }

    /**
     * 设置任务状态异常原因
     */
    public void setErrorReason(String errorReason) {
        this.errorReason = errorReason;
    }

    /**
     * 获得是否启动成功过;0：否，1：是
     */
    public Integer getIsStartUp() {
        return this.isStartUp;
    }

    /**
     * 设置是否启动成功过;0：否，1：是
     */
    public void setIsStartUp(Integer isStartUp) {
        this.isStartUp = isStartUp;
    }

    /**
     * 获得防止并发状态重复启动;1 正在启动 0 可以启动
     */
    public Integer getIsStarting() {
        return this.isStarting;
    }

    /**
     * 设置防止并发状态重复启动;1 正在启动 0 可以启动
     */
    public void setIsStarting(Integer isStarting) {
        this.isStarting = isStarting;
    }

    /**
     * 获得设备
     */
    public List<AyCameraVo> getAyCameraVos() {
        return this.ayCameraVos;
    }

    /**
     * 设置设备
     */
    public void setAyCameraVos(List<AyCameraVo> ayCameraVos) {
        this.ayCameraVos = ayCameraVos;
    }

    /**
     * 获得备注
     */
    public String getRemark() {
        return this.remark;
    }

    /**
     * 设置备注
     */
    public void setRemark(String remark) {
        this.remark = remark;
    }

    @Override
    public String toString() {
        return "AyFaceTask{id=" + id +
                ",name=" + name +
                ",beginTime=" + beginTime +
                ",endTime=" + endTime +
                ",status=" + status +
                ", type=" + type +
                ",isDeleted=" + isDeleted +
                ",errorReason=" + errorReason +
                ",isStartUp=" + isStartUp +
                ",isStarting=" + isStarting +
                ",remark=" + remark +
                ",createdId=" + createdId +
                ",createdBy=" + createdBy +
                ",createdTime=" + createdTime +
                ",updatedId=" + updatedId +
                ",updatedBy=" + updatedBy +
                ",updatedTime=" + updatedTime +
                "}";
    }

}
